package com.ms.game.slot.base;



import java.lang.reflect.InvocationTargetException;

import com.ms.game.common.GameType;
import com.ms.game.lobby.message.CLobbyHallMachinedataRequest;
import com.ms.game.lobby.message.LobbyDebugCmdToModuleRequest;
import com.ms.game.slot.base.message.SlotBasicDMMessageRequest;
import com.ms.game.slot.base.message.SlotBasicGameMessageRequest;
import com.ms.service.module.datacenterlite.message.SDCLiteNotifySeatStatChangeRequest;
import com.xpec.c4.game.datamanager.BaseDataInfo;
import com.xpec.c4.message.MessageTypes;

/**
 * slot door man Processer interface
 * @author TW15012
 *
 */
public interface ISlotDoormanProcesser 
{
	/**
	 * 取得遊戲 id {@link GameType}
	 */
	public GameType getGameType();

	/**
	 * 將某機台玩家直接踢出
	 */
	public boolean onKickPlayerOnMachine(String halltype , int machineid);
	
	/**
	 * dc player data back
	 * @param obj
	 * @param userObject
	 * @throws ClassNotFoundException 
	 * @throws InvocationTargetException 
	 * @throws IllegalArgumentException 
	 * @throws IllegalAccessException 
	 * @throws SecurityException 
	 * @throws NoSuchMethodException 
	 */
	public void onPlayerDataAgentBack(BaseDataInfo obj,Object... userObject) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ClassNotFoundException;

	
	/**
	 * 大廳通知取消離線資料back
	 * @param errorCode
	 * @param userObject
	 */
	public void onLobbyCancelOfflineDataBack(int errorCode ,Object... userObject);
	
	
	/**
	 * 處理由lobby zone 丟過來的debug command
	 * @param request 須轉型成 {@link LobbyDebugCmdToModuleRequest}
	 * @throws ClassNotFoundException 
	 */
	void revLobbyDebugCommand(SlotBasicDMMessageRequest request) throws ClassNotFoundException;
	
	
	/**
	 * 讀取館機台資料
	 * @param request
	 */
	void revMachineDataList(SlotBasicDMMessageRequest request);
	
	
	/**
	 * 玩家申請入座
	 * @param request
	 * @throws ClassNotFoundException 
	 */
	public void revDoSeatMachine(SlotBasicDMMessageRequest request) throws ClassNotFoundException;
	
	
	/**
	 * 驗證玩家入座資訊
	 * @param request
	 */
	public void revDoSeatCheckCurrentData(SlotBasicGameMessageRequest request);
	
	
	 /**
	  * 修改機台狀態
	  * @param request
	  */
	public void revSeatStatChange(SlotBasicGameMessageRequest request) throws ClassNotFoundException;
	
	
	/**
	 * dc lite 主動通知過期並清除座位
	 * @param request
	 */
	public void revDCLiteNotifyKeepDataEmpty(SDCLiteNotifySeatStatChangeRequest request);
	
	/**
	 * 大廳讀取機台列表
	 * @param request
	 */
	public void revLobbyHallMachineList(CLobbyHallMachinedataRequest request);

	/**
	 * client 要求取得機台內的角色資訊<br>
	 * 實做根據機台內角色 guid 轉發要求到對應 game module 的部份<br>
	 * group message 內的 session id 要記得填<br>
	 * 轉送消息給 gamemodule: {@link MessageTypes#S_SLOT_COMMON_DM_SEAT_PLAYER_INFO_REQUEST}<br>
	 * 回傳錯誤給 client: {@link MessageTypes#S_SLOT_COMMON_DM_SEAT_PLAYER_INFO_RESULT}
	 * @param request
	 */
	public void revSeatPlayerInfoRequest(SlotBasicDMMessageRequest request);
	
	
	/**
	 * game server 驗證過期通知
	 * @param request
	 */
	public void revSeatVerifyTimeOutNotify(SlotBasicDMMessageRequest request);
}
